<template>
  <div>
    <!-- 导航栏 -->
    <van-nav-bar left-arrow title="搜索中心" />
    <!-- 搜索栏 -->
    <van-search
      v-model="key"
      show-action
      placeholder="请输入搜索关键词"
      @search="onSearch"
      @input="onInput"
    >
      <template #action>
        <div @click="onSearch">搜索</div>
      </template>
    </van-search>
    <!-- 联想词汇区域 -->
    <van-cell-group v-if="key">
      <van-cell v-for="(item, index) in colorList" :key="index" icon="search">
        <div v-html="item"></div>
      </van-cell>
    </van-cell-group>
    <!-- 历史记录 -->
    <van-cell-group v-else>
      <van-cell title="历史记录" />
      <van-cell
        v-for="(item, index) in historyList"
        :key="index"
        :title="item"
      />
    </van-cell-group>
  </div>
</template>

<script>
// 导入
import { suggestAPI } from '@/api/search'
export default {
  name: 'MySearch',
  data () {
    return {
      key: '',
      suggestList: [],
      historyList: JSON.parse(localStorage.getItem('hmtt94-history')) || []
    }
  },
  methods: {
    onSearch () {
      // 确实要搜索了
      // 把搜索的关键字存起来，严格来讲应该判断登录了就发请求，没登录就存到本地
      // 但是我们这个接口没有提供，所以就统一只存到本地
      // 判断当前数组有没有本次要搜索的内容
      const index = this.historyList.indexOf(this.key)
      if (index !== -1) {
        this.historyList.splice(index, 1)
      }
      // 先把输入的搜索关键字加到数组里
      this.historyList.unshift(this.key)
      // 然后再存
      localStorage.setItem('hmtt94-history', JSON.stringify(this.historyList))

      // 做路由跳转
      this.$router.push({
        name: 'SearchResult',
        query: {
          key: this.key
        }
      })
    },
    // 搜索框值改变触发
    async onInput () {
      // 搜索框有值才发请求
      if (this.key) {
        const res = await suggestAPI({
          q: this.key
        })
        // 判断返回的是不是null，不是null就直接赋值
        // 是null就直接给空数组
        if (res.data.options[0]) {
          this.suggestList = res.data.options
        } else {
          this.suggestList = []
        }
      }
    }
  },

  computed: {
    colorList () {
      // 依赖了请求得到的数组，而且长度要保持一致
      return this.suggestList.map(v => {
        // 把每一项中的关键字找出来，并把它们包成`span`，加一个行内样式
        return v.replaceAll(
          this.key,
          `<span style="color:red;">${this.key}</span>`
        )
      })
    }
  }
}
</script>

<style></style>
